import { get, post, put, del } from './axios'
import type { ApiResponse, PageQuery } from '../model/common-model'
import type { ProjectConfig } from '../model/project-model'

/**
 * 获取项目配置列表
 * 获取指定项目的配置列表，支持分页
 * 
 * @param projectId 项目ID
 * @param params 分页参数
 */
export function getConfigList(projectId: number, params?: PageQuery): Promise<ApiResponse<ProjectConfig[]>> {
  return get(`/configs/${projectId}`, params)
}

/**
 * 获取项目配置详情
 * 获取项目中指定键的配置详情
 * 
 * @param projectId 项目ID
 * @param configKey 配置键
 */
export function getConfigDetail(projectId: number, configKey: string): Promise<ApiResponse<ProjectConfig>> {
  return get(`/configs/${projectId}/${configKey}`)
}

/**
 * 创建项目配置
 * 为项目创建新的配置项，如果键已存在则更新值
 * 
 * @param projectId 项目ID
 * @param data 配置数据
 */
export function createConfig(projectId: number, data: Omit<ProjectConfig, 'id' | 'project_id' | 'created_at' | 'updated_at'>): Promise<ApiResponse<ProjectConfig>> {
  return post(`/configs/${projectId}`, data)
}

/**
 * 更新项目配置
 * 更新项目中指定键的配置
 * 
 * @param projectId 项目ID
 * @param configKey 配置键
 * @param data 更新数据
 */
export function updateConfig(projectId: number, configKey: string, data: Pick<ProjectConfig, 'value' | 'description'>): Promise<ApiResponse<ProjectConfig>> {
  return put(`/configs/${projectId}/${configKey}`, data)
}

/**
 * 删除项目配置
 * 删除项目中指定键的配置
 * 
 * @param projectId 项目ID
 * @param configKey 配置键
 */
export function deleteConfig(projectId: number, configKey: string): Promise<ApiResponse<{ success: boolean }>> {
  return del(`/configs/${projectId}/${configKey}`)
}

/**
 * 批量创建项目配置
 * 批量创建或更新项目的配置项
 * 
 * @param projectId 项目ID
 * @param configs 配置列表
 */
export function batchCreateConfigs(projectId: number, configs: Omit<ProjectConfig, 'id' | 'project_id' | 'created_at' | 'updated_at'>[]): Promise<ApiResponse<ProjectConfig[]>> {
  return post(`/configs/${projectId}/batch`, { configs })
}

/**
 * 批量删除项目配置
 * 批量删除项目的配置项
 * 
 * @param projectId 项目ID
 * @param keys 配置键列表
 */
export function batchDeleteConfigs(projectId: number, keys: string[]): Promise<ApiResponse<{ success: boolean }>> {
  return del(`/configs/${projectId}/batch`, { keys })
}

/**
 * 从文件导入项目配置
 * 从JSON或YAML文件导入项目配置
 * 
 * @param projectId 项目ID
 * @param fileFormat 文件格式: "json" 或 "yaml"
 * @param file 配置文件
 */
export function importConfigFromFile(projectId: number, fileFormat: 'json' | 'yaml', file: File): Promise<ApiResponse<ProjectConfig[]>> {
  const formData = new FormData()
  formData.append('file_format', fileFormat)
  formData.append('file', file)
  
  return post(`/configs/${projectId}/import`, formData, {
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  })
}
